home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src_win / WinHTTrack / OptionTab10.cpp < prev    next >
C/C++ Source or Header  |  2004-01-24  |  12KB  |  362 lines

  1. // OptionTab10.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Shell.h"
  6. #include "OptionTab10.h"
  7. #include "ProxyId.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /* Externe C */
  16. extern "C" {
  17.   #include "HTTrackInterface.h"
  18.   #include "htsbase.h"
  19.   #include "htslib.h"
  20. }
  21.  
  22.   //extern char* jump_identification(char*);
  23.  
  24. /////////////////////////////////////////////////////////////////////////////
  25. // COptionTab10 property page
  26.  
  27. IMPLEMENT_DYNCREATE(COptionTab10, CPropertyPage)
  28.  
  29. COptionTab10::COptionTab10() : CPropertyPage(COptionTab10::IDD)
  30. {
  31.   // Patcher titre
  32.   if (LANG_T(-1)) {    // Patcher en franτais
  33.     m_psp.pszTitle=LANG(LANG_IOPT10); // titre
  34.     m_psp.dwFlags|=PSP_USETITLE;
  35.   }
  36.   m_psp.dwFlags|=PSP_HASHELP;
  37.   //
  38.     //{{AFX_DATA_INIT(COptionTab10)
  39.     m_proxy = _T("");
  40.     m_port = _T("");
  41.     m_ftpprox = FALSE;
  42.     //}}AFX_DATA_INIT
  43. }
  44.  
  45. COptionTab10::~COptionTab10()
  46. {
  47. }
  48.  
  49. void COptionTab10::DoDataExchange(CDataExchange* pDX)
  50. {
  51.     CPropertyPage::DoDataExchange(pDX);
  52.     //{{AFX_DATA_MAP(COptionTab10)
  53.     DDX_Control(pDX, IDC_prox, m_ctl_prox);
  54.     DDX_Control(pDX, IDC_PWDHIDE, m_ctl_pwdhide);
  55.     DDX_Control(pDX, IDC_ftpprox, m_ctl_ftpprox);
  56.     DDX_Control(pDX, IDC_portprox, m_ctl_portprox);
  57.     DDX_Control(pDX, IDC_proxtitle, m_ctl_proxtitle);
  58.     DDX_Text(pDX, IDC_prox, m_proxy);
  59.     DDX_Text(pDX, IDC_portprox, m_port);
  60.     DDX_Check(pDX, IDC_ftpprox, m_ftpprox);
  61.     //}}AFX_DATA_MAP
  62. }
  63.  
  64. #define wm_ProxySearch (WM_USER + 1)
  65. BEGIN_MESSAGE_MAP(COptionTab10, CPropertyPage)
  66.     //{{AFX_MSG_MAP(COptionTab10)
  67.     ON_BN_CLICKED(IDC_proxyconfigure, Onproxyconfigure)
  68.     ON_EN_CHANGE(IDC_prox, OnChangeprox)
  69.     ON_BN_CLICKED(IDC_PWDHIDE, OnPwdhide)
  70.     ON_CBN_SELCHANGE(IDC_prox, OnChangeprox)
  71.     ON_CBN_EDITCHANGE(IDC_prox, OnChangeprox)
  72.     ON_CBN_EDITUPDATE(IDC_prox, OnChangeprox)
  73.     //}}AFX_MSG_MAP
  74.   ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  75.   ON_MESSAGE( wm_ProxySearch, ProxySearch0 )
  76.   ON_MESSAGE( wm_ProxySearch+1, ProxySearch1 )
  77.   ON_MESSAGE( wm_ProxySearch+2, ProxySearch2 )
  78.   ON_MESSAGE( wm_ProxySearch+3, ProxySearch3 )
  79.   ON_MESSAGE( wm_ProxySearch+4, ProxySearch4 )
  80.   ON_MESSAGE( wm_ProxySearch+5, ProxySearch5 )
  81.   ON_MESSAGE( wm_ProxySearch+6, ProxySearch6 )
  82.   ON_MESSAGE( wm_ProxySearch+7, ProxySearch7 )
  83.   ON_MESSAGE( wm_ProxySearch+8, ProxySearch8 )
  84.   ON_MESSAGE( wm_ProxySearch+9, ProxySearch9 )
  85. END_MESSAGE_MAP()
  86.  
  87. /////////////////////////////////////////////////////////////////////////////
  88. // COptionTab10 message handlers
  89.  
  90.  
  91. BOOL COptionTab10::OnInitDialog() 
  92. {
  93.     CPropertyPage::OnInitDialog();
  94.     
  95.   EnableToolTips(true);     // TOOL TIPS
  96.  
  97.   /* hide password */
  98.   CString st;
  99.   GetDlgItemText(IDC_prox,st);
  100.   if (st.Find('@')>=0) {
  101.     m_ctl_pwdhide.SetCheck(1);
  102.     OnPwdhide();
  103.   } else {
  104.     m_ctl_pwdhide.SetCheck(0);
  105.     OnPwdhide();
  106.   }
  107.  
  108.   if (LANG_T(-1)) {    // Patcher en franτais
  109.     SetDlgItemTextCP(this, IDC_proxyconfigure,LANG(LANG_I47b)); // "Configurer"
  110.     SetDlgItemTextCP(this, IDC_ftpprox,LANG(LANG_I47c));
  111.     SetDlgItemTextCP(this, IDC_PWDHIDE,LANG_HIDEPWD);  /* Hide password */
  112.   }  
  113.  
  114.   // mode modif α la volΘe
  115.   if (modify==1) {
  116.     GetDlgItem(IDC_prox           ) ->ModifyStyle(0,WS_DISABLED);
  117.     GetDlgItem(IDC_portprox       ) ->ModifyStyle(0,WS_DISABLED);
  118.     GetDlgItem(IDC_proxyconfigure ) ->ModifyStyle(0,WS_DISABLED);
  119.     GetDlgItem(IDC_proxtitle      ) ->ModifyStyle(0,WS_DISABLED);
  120.     GetDlgItem(IDC_ftpprox        ) ->ModifyStyle(0,WS_DISABLED);
  121.   } else {
  122.     GetDlgItem(IDC_prox           ) ->ModifyStyle(WS_DISABLED,0);
  123.     GetDlgItem(IDC_portprox       ) ->ModifyStyle(WS_DISABLED,0);
  124.     GetDlgItem(IDC_proxyconfigure ) ->ModifyStyle(WS_DISABLED,0);
  125.     GetDlgItem(IDC_proxtitle      ) ->ModifyStyle(WS_DISABLED,0);
  126.     GetDlgItem(IDC_ftpprox        ) ->ModifyStyle(WS_DISABLED,0);
  127.   }
  128.  
  129.   CString str;
  130.   GetDlgItemText(IDC_prox,str);
  131.   m_ctl_prox.ResetContent();
  132.   m_ctl_prox.AddString("");
  133.  
  134.   HKEY phkResult;
  135.   if (RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,KEY_READ,&phkResult)==ERROR_SUCCESS) {
  136.     DWORD type=0;
  137.     DWORD datasize=1000;
  138.     char data[1024];
  139.     data[0]='\0';
  140.     if (RegQueryValueEx(phkResult,"ProxyServer",0,&type,(unsigned char*)&data,&datasize)==ERROR_SUCCESS) {
  141.       if (datasize) {
  142.         char* a=strchr(data,':');
  143.         if (a)
  144.           *a='\0';
  145.         m_ctl_prox.AddString(data);
  146.       }
  147.     }
  148.     RegCloseKey(phkResult);
  149.   }
  150.   SetDlgItemTextCP(this, IDC_prox,str);
  151.  
  152.   // Do not search for a proxy everytime
  153.   CWinApp* pApp = AfxGetApp();
  154.   if (pApp->GetProfileInt("Interface","FirstProxySearch",0) != 1) {
  155.     pApp->WriteProfileInt("Interface","FirstProxySearch",1);
  156.     
  157.     // Launch proxy name search
  158.     int i=0;
  159.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="proxy")   ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  160.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="www")     ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  161.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="ns")      ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  162.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="web")     ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  163.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="ntserv")  ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  164.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="gate")    ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  165.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="gateway") ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  166.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="firewall"),this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  167.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="cache")   ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  168.     
  169.   }
  170.   
  171.   return TRUE;  // return TRUE unless you set the focus to a control
  172.                   // EXCEPTION: OCX Property Pages should return FALSE
  173. }
  174.  
  175.  
  176. void COptionTab10::Onproxyconfigure() 
  177. {
  178.   CProxyId proxy;
  179.   char adr[256];
  180.   CString s;
  181.   GetDlgItemText(IDC_portprox,s);
  182.   proxy.m_proxport=s;
  183.   GetDlgItemText(IDC_prox,s);
  184.   strcpybuff(adr,s);
  185.   proxy.m_proxadr=jump_identification(adr);
  186.   if (jump_identification(adr)!=adr) {
  187.     char user_pass[256]; user_pass[0]='\0';
  188.     char* a;
  189.     strncatbuff(user_pass,adr,(int) jump_identification(adr) - (int) adr - 1);
  190.     a=strchr(user_pass,':');
  191.     if (a)
  192.       *a='\0';
  193.     else
  194.       a=user_pass+strlen(user_pass);
  195.     proxy.m_proxlogin=user_pass;
  196.     proxy.m_proxpass=a+1;
  197.   }
  198.   if (proxy.DoModal() == IDOK) {
  199.     if (proxy.m_proxlogin.GetLength()==0) {
  200.       SetDlgItemTextCP(this, IDC_prox,proxy.m_proxadr);
  201.       m_ctl_pwdhide.SetCheck(0);
  202.       OnPwdhide();
  203.     } else {
  204.       SetDlgItemTextCP(this, IDC_prox,proxy.m_proxlogin+":"+proxy.m_proxpass+"@"+proxy.m_proxadr);
  205.       m_ctl_pwdhide.SetCheck(1);
  206.       OnPwdhide();
  207.     }
  208.     SetDlgItemTextCP(this, IDC_portprox,proxy.m_proxport);
  209.   }
  210. }
  211.  
  212.  
  213.  
  214. // ------------------------------------------------------------
  215. // TOOL TIPS
  216. //
  217. // ajouter dans le .cpp:
  218. // remplacer les deux Wid1:: par le nom de la classe::
  219. // dans la message map, ajouter
  220. // ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  221. // dans initdialog ajouter
  222. // EnableToolTips(true);     // TOOL TIPS
  223. //
  224. // ajouter dans le .h:
  225. // char* GetTip(int id);
  226. // et en generated message map
  227. // afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  228. BOOL COptionTab10::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  229. {
  230.   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  231.   UINT nID =pNMHDR->idFrom;
  232.   if (pTTT->uFlags & TTF_IDISHWND)
  233.   {
  234.     // idFrom is actually the HWND of the tool
  235.     nID = ::GetDlgCtrlID((HWND)nID);
  236.     if(nID)
  237.     {
  238.       char* st=GetTip(nID);
  239.       if (st != "") {
  240.         pTTT->lpszText = st;
  241.         pTTT->hinst = AfxGetResourceHandle();
  242.         return(TRUE);
  243.       }
  244.     }
  245.   }
  246.   return(FALSE);
  247. }
  248. char* COptionTab10::GetTip(int ID)
  249. {
  250.   switch(ID) {
  251.     case IDC_prox:  return LANG(LANG_G14); break; // "Proxy if needed","Proxy si besoin"); break;
  252.     case IDC_portprox: return LANG(LANG_G15); break; // "Proxy port","Port du proxy"); break;
  253.     case IDC_proxyconfigure: return LANG_G15b; break;
  254.     case IDC_ftpprox: return LANG_G15c; break;
  255.   }
  256.   return "";
  257. }
  258. // TOOL TIPS
  259. // ------------------------------------------------------------
  260.  
  261.  
  262.  
  263. void COptionTab10::OnChangeprox() 
  264. {
  265.   CString st="";
  266.   char tempo[8192];
  267.   CString port="";
  268.  
  269.   GetDlgItemText(IDC_prox,st);
  270.  
  271.   int pos=st.Find(':');
  272.   if (pos>=0) {
  273.     port=st.Mid(pos+1);
  274.     st=st.Mid(0,pos);
  275.     SetDlgItemTextCP(this, IDC_prox,st);
  276.   }
  277.   strcpybuff(tempo,st);
  278.   
  279.   int ex=0;
  280.   do {
  281.     if (strlen(tempo)>0) {
  282.       switch (tempo[strlen(tempo)-1]) {
  283.       case 10: case 13: case 32: tempo[strlen(tempo)-1]='\0';
  284.         break;
  285.       default: ex=1;
  286.         break;
  287.       }
  288.     } else ex=1;
  289.   } while(!ex);
  290.   
  291.   if ((strlen(tempo)>0)!=prox_status) {
  292.     prox_status=!prox_status;
  293.     
  294.     if (strlen(tempo)>0) {
  295.       CString st="";
  296.       GetDlgItemText(IDC_portprox,st);
  297.       if (strlen(st)==0) {
  298.         SetDlgItemTextCP(this, IDC_portprox,"8080");
  299.         m_ctl_portprox.RedrawWindow();
  300.       }
  301.       m_ctl_proxtitle.ModifyStyle(WS_DISABLED,0);
  302.     }
  303.     else {
  304.       SetDlgItemTextCP(this, IDC_portprox,"");
  305.       m_ctl_portprox.RedrawWindow();
  306.       m_ctl_proxtitle.ModifyStyle(0,WS_DISABLED);
  307.     }
  308.     m_ctl_proxtitle.RedrawWindow();
  309.   }  
  310.  
  311.   if (port.GetLength())
  312.     SetDlgItemTextCP(this, IDC_portprox,port);
  313. }
  314.  
  315. void COptionTab10::OnPwdhide() 
  316. {
  317.   /* ES_PASSWORD */
  318.   if (IsDlgButtonChecked(IDC_PWDHIDE)) {
  319.     GetDlgItem(IDC_prox)->ModifyStyle(WS_VISIBLE,0);
  320.     GetDlgItem(IDC_prox)->ModifyStyle(0,WS_DISABLED);
  321.     GetDlgItem(IDC_portprox)->ModifyStyle(WS_VISIBLE,0);
  322.     GetDlgItem(IDC_portprox)->ModifyStyle(0,WS_DISABLED);
  323.   } else {
  324.     GetDlgItem(IDC_prox)->ModifyStyle(0,WS_VISIBLE);
  325.     GetDlgItem(IDC_prox)->ModifyStyle(WS_DISABLED,0);
  326.     GetDlgItem(IDC_portprox)->ModifyStyle(0,WS_VISIBLE);
  327.     GetDlgItem(IDC_portprox)->ModifyStyle(WS_DISABLED,0);
  328.   }
  329.   RedrawWindow();
  330.  
  331.  
  332. LRESULT COptionTab10::ProxySearch0(WPARAM wParam,LPARAM lParam) { return ProxySearch(0,wParam,lParam); }
  333. LRESULT COptionTab10::ProxySearch1(WPARAM wParam,LPARAM lParam) { return ProxySearch(1,wParam,lParam); }
  334. LRESULT COptionTab10::ProxySearch2(WPARAM wParam,LPARAM lParam) { return ProxySearch(2,wParam,lParam); }
  335. LRESULT COptionTab10::ProxySearch3(WPARAM wParam,LPARAM lParam) { return ProxySearch(3,wParam,lParam); }
  336. LRESULT COptionTab10::ProxySearch4(WPARAM wParam,LPARAM lParam) { return ProxySearch(4,wParam,lParam); }
  337. LRESULT COptionTab10::ProxySearch5(WPARAM wParam,LPARAM lParam) { return ProxySearch(5,wParam,lParam); }
  338. LRESULT COptionTab10::ProxySearch6(WPARAM wParam,LPARAM lParam) { return ProxySearch(6,wParam,lParam); }
  339. LRESULT COptionTab10::ProxySearch7(WPARAM wParam,LPARAM lParam) { return ProxySearch(7,wParam,lParam); }
  340. LRESULT COptionTab10::ProxySearch8(WPARAM wParam,LPARAM lParam) { return ProxySearch(8,wParam,lParam); }
  341. LRESULT COptionTab10::ProxySearch9(WPARAM wParam,LPARAM lParam) { return ProxySearch(9,wParam,lParam); }
  342.  
  343. // Search dor a proxy
  344. #define WSAGETASYNCERROR(lParam)            HIWORD(lParam)
  345. #define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
  346. LRESULT COptionTab10::ProxySearch(int id,WPARAM wParam,LPARAM lParam) {
  347.   int errcode=WSAGETASYNCERROR(lParam);
  348.   int bufflen=WSAGETASYNCBUFLEN(lParam);
  349.  
  350.   if ((id>=0) && (id<10)) {
  351.     if (!errcode) {
  352.       //HOSTENT* host=(HOSTENT*) ProxyDetectBuff[id];
  353.       //if (host->h_name) {
  354.       m_ctl_prox.AddString(ProxyDetectName[id]);
  355.       //}
  356.     }
  357.   }
  358.  
  359.   return 0;
  360. }
  361.